package main

import (
	"net/http"
	"strconv"
	"strings"

	"github.com/gin-gonic/gin"
)

// 模拟数据源假设是MySQL中的数据
var langs = []Lang{
	{ID: 1, Name: "Golang"},
	{ID: 2, Name: "Java"},
	{ID: 3, Name: "PHP"},
	{ID: 4, Name: "Python"},
}

// 编程语言结构体
type Lang struct {
	ID   int
	Name string
}

// 实例化Lang对象作为临时存放变量
var lang Lang

func main() {
	r := gin.Default()

	// GET Method
	// 在 Gin 框架中，路径中使用冒号表示 Path 路径参数，比如示例中的 :id，然后通过 c.Param("id") 获取需要查询用户的 ID 值。
	r.GET("/users/:id", func(c *gin.Context) {
		// 获取url路径中的参数
		id := c.Param("id")
		// 变量声明
		found := false
		// 类似于数据库的SQL查询
		for _, data := range langs {
			if strings.EqualFold(id, strconv.Itoa(data.ID)) {
				lang = data
				found = true
				break
			}
		}
		// 若查询到数据则输出
		if found {
			c.JSON(http.StatusOK, gin.H{
				"code": 200,
				"data": lang,
			})
		} else {
			c.JSON(http.StatusNotFound, gin.H{
				"code":    "0",
				"message": "用户不存在",
			})
		}
	})

	// Post Method
	// 新增用户的逻辑是获取客户端上传的 name 值，然后生成一个 User 用户，最后把它存储到 users 集合中。
	r.POST("/users", func(c *gin.Context) {
		param_lang := c.DefaultPostForm("lang", "")
		if param_lang != "" {
			lang := Lang{ID: len(langs) + 1, Name: param_lang}
			langs = append(langs, lang)
			c.JSON(http.StatusCreated, gin.H{
				"code": 200,
				"data": lang,
			})
		} else {
			c.JSON(http.StatusOK, gin.H{
				"code":    0,
				"message": "请输入用户名称",
			})
		}
	})

	r.Run()
}
